package top.as.sean.common.excel;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ObjectUtils;
import top.as.sean.common.exception.GlobalException;
import top.as.sean.common.response.RespStatus;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.List;

/**
 * ExcelUtil
 * 基于easyExcel的开源框架，poi版本3.17
 * BeanCopy ExcelException 属于自定义数据，属于可自定义依赖
 * 工具类尽可能还是需要减少对其他java的包的依赖
 *
 * @author ArchieSean
 * @date: 2021年11月9日09:15:50
 */
@Slf4j
public final class ExcelUtil {
//    /**
//     * 私有化构造方法.
//     */
//    private ExcelUtil() {
//    }
//
//    /**
//     * 导出文件时为Writer生成OutputStream.
//     *
//     * @param fileName 文件名称
//     * @param response response
//     * @return output
//     * @throws GlobalException 业务异常
//     */
//    public static OutputStream getOutputStream(String fileName, HttpServletResponse response)
//            throws GlobalException {
//        //创建本地文件
//        try {
//            fileName = new String(fileName.getBytes(), "UTF-8");
//            //默认下载时，导出为xls格式
//            response.setContentType("application/msexcel");
//            response.setCharacterEncoding("utf-8");
//            response.setHeader("Pragma", "public");
//            response.setHeader("Cache-Control", "max-age=60");
//            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,
//                    "utf-8"));
//            return response.getOutputStream();
//        } catch (IOException e) {
//            log.error("导出文件失败", e);
//            throw new GlobalException(RespStatus.PARAM_ERROR);
//        }
//    }
//
//    /**
//     * 用于excel文件上传解析，解析返回list
//     *
//     * @param inputStream 输入流
//     * @param clazz       字节码
//     * @param sheetIndex  工作簿的索引，默认从0开始
//     * @param <T>         泛型
//     * @return list
//     */
//    public static <T> List<T> readExcel(InputStream inputStream, Class<T> clazz, Integer sheetIndex) {
//        List<T> list = Lists.newArrayList();
//        EasyExcel.read(inputStream, clazz, new ReadListener<T>() {
//            @Override
//            public void invoke(T data, AnalysisContext context) {
//                list.add(data);
//            }
//
//            @Override
//            public void doAfterAllAnalysed(AnalysisContext context) {
//            }
//        }).sheet(ObjectUtils.isEmpty(sheetIndex) ? BigDecimal.ZERO.intValue() : sheetIndex).doRead();
//        return list;
//    }

}
